package top.jacktgq.imooc.quickStart;

import io.netty.bootstrap.ServerBootstrap;
import io.netty.channel.ChannelFuture;
import io.netty.channel.nio.NioEventLoopGroup;
import io.netty.channel.socket.nio.NioServerSocketChannel;

/**
 * 
 * @Title: HelloServer.java 
 * @Package top.jacktgq.imooc 
 * @Description: Netty服务端：客户端发送一个请求，服务端会返回hello netty
 * @author CandyWall   
 * @date 2021年2月4日 下午5:29:39 
 * @version V1.0
 */
public class HelloServer {
    public static void main(String[] args) {
        // 主线程组
        // 创建一对线程组，用于接收客户端的连接，不做任何处理，跟老板一样，不做事
        NioEventLoopGroup bossGroup = new NioEventLoopGroup();
        // 从线程组，老板线程组会把任务丢给他，让员工线程组去做任务
        NioEventLoopGroup workerGroup = new NioEventLoopGroup();
        ServerBootstrap bootstrap = new ServerBootstrap();
        
        bootstrap.group(bossGroup, workerGroup)  // 设置主从线程组
                .channel(NioServerSocketChannel.class)  // 设置Nio的双向通道
                .childHandler(new HelloInitializer());
        try {
            // 启动Server，并且设置8088为启动端口，同时启动方式为同步
            ChannelFuture future = bootstrap.bind(8888).sync();
            // 监听关闭的channel，设置启动方式为同步
            future.channel().closeFuture().sync();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            bossGroup.shutdownGracefully();
            workerGroup.shutdownGracefully();
        }
    }
}
